package com.wannabuy.mobile.dao;

import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.wannabuy.mobile.controler.ListaDeGrupos;
import com.wannabuy.mobile.model.Comprador;
import com.wannabuy.mobile.model.Grupo;
import com.wannabuy.mobile.model.Produto;
import com.wannabuy.mobile.util.Constantes;
import com.wannabuy.mobile.util.Util;

public class DAOGrupos implements RepositorioGrupos{

	
	public boolean desassociarGrupo(Comprador comp, Grupo grupo){
		
		boolean ret = false;
		HttpClient httpcliente = new DefaultHttpClient();
		ArrayList<NameValuePair> postParameters;
		String respostadoBanco="";
		HttpPost httppost = new HttpPost(
				Constantes.enderecoBanco+"/grupo");
		postParameters = new ArrayList<NameValuePair>();
		GsonBuilder conversor = new GsonBuilder();
		conversor.setDateFormat("dd/MM/yyyy");
		postParameters.add(new BasicNameValuePair("comprador", conversor.create().toJson(comp)));
		postParameters.add(new BasicNameValuePair("grupo", conversor.create().toJson(grupo)));
		postParameters.add(new BasicNameValuePair("acao", "desassociargrupo"));
		
		try {
			httppost.setEntity(new UrlEncodedFormEntity(postParameters));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		
		HttpResponse resposta;

		try {
			resposta = httpcliente.execute(httppost);

			HttpEntity entidade = resposta.getEntity();

			InputStream dados;

			if (entidade != null) {
				dados = entidade.getContent();
				respostadoBanco = Util.getStringFromInputStream(dados);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		
		//convertemos o objeto recebido em um comprador para o retorno
		
		if (respostadoBanco.equalsIgnoreCase("true")){
			ret = true;
		}
		
		
		return ret;
	}
	
	@Override
	public List<Grupo> buscarGruposPorUsuario(Comprador comp) {
		List<Grupo> listaGrupoPorUsuario = new ArrayList<Grupo>();
		HttpClient httpcliente = new DefaultHttpClient();
		ArrayList<NameValuePair> postParameters;
		String respostadoBanco="";
		HttpPost httppost = new HttpPost(
				Constantes.enderecoBanco+"/usuario");
		postParameters = new ArrayList<NameValuePair>();
		GsonBuilder conversor = new GsonBuilder();
		conversor.setDateFormat("dd/MM/yyyy");
		postParameters.add(new BasicNameValuePair("comprador", conversor.create().toJson(comp)));
		postParameters.add(new BasicNameValuePair("acao", "buscargrupousuario"));
		try {
			httppost.setEntity(new UrlEncodedFormEntity(postParameters));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		
		HttpResponse resposta;

		try {
			resposta = httpcliente.execute(httppost);

			HttpEntity entidade = resposta.getEntity();

			InputStream dados;

			if (entidade != null) {
				dados = entidade.getContent();
				respostadoBanco = Util.getStringFromInputStream(dados);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		
		//convertemos o objeto recebido em um comprador para o retorno
		
		Gson conversorLista = new Gson();
		TypeToken<List<Grupo>> listaTypeToken = new TypeToken<List<Grupo>>(){}; 
		listaGrupoPorUsuario = conversorLista.fromJson(respostadoBanco, listaTypeToken.getType());
		return listaGrupoPorUsuario;
	}

	@Override
	public List<Grupo> buscarGrupos(String produto) {
		List<Grupo> ret = new ArrayList<Grupo>();
		HttpClient httpcliente = new DefaultHttpClient();
		ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
		String respostaDoBanco = "";
		HttpPost httppost = new HttpPost(Constantes.enderecoBanco + "/grupo");
		postParameters.add(new BasicNameValuePair("descricaoproduto", produto));
		postParameters.add(new BasicNameValuePair("acao", "buscarproduto"));
		try {
			httppost.setEntity(new UrlEncodedFormEntity(postParameters));
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		HttpResponse resposta;
		
		try {
			resposta = httpcliente.execute(httppost);
			HttpEntity entidade = resposta.getEntity();
			InputStream dados;
			if (entidade != null) {
				
				dados = entidade.getContent();
				respostaDoBanco = Util.getStringFromInputStream(dados);
				
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		Gson conversor = new Gson();
		TypeToken<List<Grupo>> listaTypeToken = new TypeToken<List<Grupo>>(){};
		ret = conversor.fromJson(respostaDoBanco, listaTypeToken.getType());
		
		return ret;
	}

	@Override
	public Grupo criarGrupo(Comprador comprador, String categoria, String marca, String produto,String descricaoProduto, String valorPretendido) {
		Grupo grupo = new Grupo();
		HttpClient httpcliente = new DefaultHttpClient();
		ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
		String respostaDoBanco = "";
		HttpPost httppost = new HttpPost(Constantes.enderecoBanco + "/grupo");
		GsonBuilder conversor = new GsonBuilder();
		conversor.setDateFormat("dd/MM/yyyy");
		postParameters.add(new BasicNameValuePair("comprador", conversor.create().toJson(comprador)));
		postParameters.add(new BasicNameValuePair("categoria", categoria));
		postParameters.add(new BasicNameValuePair("marca", marca));
		postParameters.add(new BasicNameValuePair("produto", produto));
		postParameters.add(new BasicNameValuePair("descricao", descricaoProduto));
		postParameters.add(new BasicNameValuePair("valorpretendido", valorPretendido));
		postParameters.add(new BasicNameValuePair("acao", "criargrupo"));
		try {
			httppost.setEntity(new UrlEncodedFormEntity(postParameters));
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		HttpResponse resposta;
		
		try {
			resposta = httpcliente.execute(httppost);
			HttpEntity entidade = resposta.getEntity();
			InputStream dados;
			if (entidade != null) {
				
				dados = entidade.getContent();
				respostaDoBanco = Util.getStringFromInputStream(dados);
				
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		Gson conversor2 = new Gson();
		grupo = conversor2.fromJson(respostaDoBanco, Grupo.class);
		
		return grupo;
	}

	@Override
	public Grupo buscarGrupo(Produto produto) {

		Grupo GrupoPorProduto = new Grupo();
		HttpClient httpcliente = new DefaultHttpClient();
		ArrayList<NameValuePair> postParameters;
		String respostadoBanco="";
		HttpPost httppost = new HttpPost(
				Constantes.enderecoBanco+"/grupo");
		postParameters = new ArrayList<NameValuePair>();
		GsonBuilder conversor = new GsonBuilder();
		conversor.setDateFormat("dd/MM/yyyy");
		postParameters.add(new BasicNameValuePair("produto", produto.getProduto()));
		postParameters.add(new BasicNameValuePair("acao", "buscargruponomeproduto"));
		try {
			httppost.setEntity(new UrlEncodedFormEntity(postParameters));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		
		HttpResponse resposta;

		try {
			resposta = httpcliente.execute(httppost);

			HttpEntity entidade = resposta.getEntity();

			InputStream dados;

			if (entidade != null) {
				dados = entidade.getContent();
				respostadoBanco = Util.getStringFromInputStream(dados);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		
		//convertemos o objeto recebido em um comprador para o retorno
		
		GrupoPorProduto = conversor.create().fromJson(respostadoBanco, Grupo.class);
		return GrupoPorProduto;
		
	}

	@Override
	public Grupo buscarGrupo(String produto) {

		Grupo GrupoPorProduto = new Grupo();
		HttpClient httpcliente = new DefaultHttpClient();
		ArrayList<NameValuePair> postParameters;
		String respostadoBanco="";
		HttpPost httppost = new HttpPost(
				Constantes.enderecoBanco+"/grupo");
		postParameters = new ArrayList<NameValuePair>();
		GsonBuilder conversor = new GsonBuilder();
		conversor.setDateFormat("dd/MM/yyyy");
		postParameters.add(new BasicNameValuePair("produto", produto));
		postParameters.add(new BasicNameValuePair("acao", "buscargruponomeproduto"));
		try {
			httppost.setEntity(new UrlEncodedFormEntity(postParameters));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		
		HttpResponse resposta;

		try {
			resposta = httpcliente.execute(httppost);

			HttpEntity entidade = resposta.getEntity();

			InputStream dados;

			if (entidade != null) {
				dados = entidade.getContent();
				respostadoBanco = Util.getStringFromInputStream(dados);
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		
		//convertemos o objeto recebido em um comprador para o retorno
		
		GrupoPorProduto = conversor.create().fromJson(respostadoBanco, Grupo.class);
		return GrupoPorProduto;
	}

	@Override
	public Grupo associarGrupor(Grupo grupo, Comprador comprador,
			Double precoSugerido) {
		Grupo ret = new Grupo();
		HttpClient httpcliente = new DefaultHttpClient();
		ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
		String respostaDoBanco = "";
		HttpPost httppost = new HttpPost(Constantes.enderecoBanco + "/grupo");
		GsonBuilder conversor = new GsonBuilder();
		conversor.setDateFormat("dd/MM/yyyy");
		postParameters.add(new BasicNameValuePair("comprador", conversor.create().toJson(comprador)));
		postParameters.add(new BasicNameValuePair("grupo", conversor.create().toJson(grupo)));
		postParameters.add(new BasicNameValuePair("precosugerido", precoSugerido.toString()));
		postParameters.add(new BasicNameValuePair("acao", "inserircompradorgrupo"));
		try {
			httppost.setEntity(new UrlEncodedFormEntity(postParameters));
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		HttpResponse resposta;
		
		try {
			resposta = httpcliente.execute(httppost);
			HttpEntity entidade = resposta.getEntity();
			InputStream dados;
			if (entidade != null) {
				
				dados = entidade.getContent();
				respostaDoBanco = Util.getStringFromInputStream(dados);
				
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		
		Gson conversor2 = new Gson();
		grupo = conversor2.fromJson(respostaDoBanco, Grupo.class);
		
		return ret;

	}

	
}
